# 类装饰器:用类实现装饰器, 不能实现带参数的装饰器
# 通过类的__call__()方法实现


class Myclass(object):
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):    # 实现 call 方法的类 生成的对象 可以直接调用
        print("装饰器功能")
        result = self.func(*args, **kwargs)
        return result


@Myclass
def fun(n):
    return "第一个普通函数:{}".format(n+1)

print(fun(5))


def func(n, m):
    return "第二个普通函数:{}".format(n+m)

func = Myclass(func)    # 等同于类的实例化 生成一个对象
func()      # 对象() == 对象.__call__()

